package _1_leetcode_1_20._11盛最多水的容器;

/**
 * 给你 n 个非负整数 a1，a2，...，an，每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线，垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/container-with-most-water
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *@描述
 *@参数
 *@返回值
 *@创建人  mazexal
 *@创建时间  2021/1/5
 */
public class Solution {
    public static void main(String[] args) {

        // System.out.println(maxArea(new int[]{1, 8, 6, 2, 5, 4, 8, 3, 7}));
        //  System.out.println(maxArea(new int[]{4, 3, 2, 1, 4}));
        System.out.println(maxArea(new int[]{1, 2, 1}));
        System.out.println(maxArea(new int[]{1,  1}));
        System.out.println(maxArea(new int[]{2,3,4,5,18,17,6}));
    }

    public static int maxArea(int[] height) {
        if (height.length < 2) {
            return 0;
        }
        int left = 0;
        int right = height.length - 1;
        int rightMax;
        int leftMax;
        int maxArea = 0;
        while (right - left > 0) {
            int distance = right - left;
            rightMax = height[right];
            leftMax = height[left];
            int tmp = Math.min(leftMax, rightMax) * distance;
            maxArea = Math.max(tmp, maxArea);
            if (leftMax > rightMax) {
                right--;
            } else {
                left++;
            }
        }
        return maxArea;
    }
}
